<?php

class MasterPageClient extends TTemplateControl {
//<editor-fold defaultstate="collapsed" desc="Metodos Privados">
  /**
   * dibuja el menu
   * @param <type> $arrPermisos
   * @return <type>
   * @author VSR, 01/01/2011
   */
  private function dibujarMenu($arrPermisos){
    $html = "";
    $htmlSinRegistro = "<span class=\"cssTextoNormal\"><i>No tiene p&aacute;ginas asociadas</i></span>";
    $sb = new StringBuilder();
    $themeBaseUrl = $this->Page->Theme->BaseUrl;

    try {
      //obtiene el template para dibujar el menu
      $pathBase = Utilidades::obtenerDirectorioBaseAplicacion();
      $templateMenu = Utilidades::obtenerContenidoPlantillaHTML($pathBase."template".DIRECTORY_SEPARATOR."MenuPaginas.html",true);
      $plantillaCategoria = Utilidades::extraeTextoEntreDosPalabras($templateMenu, "<!--[BEGIN_TEMPLATE_CATEGORIAS]-->", "<!--[END_TEMPLATE_CATEGORIAS]-->");
      $idPaginaSeleccionadaSesion = Utilidades::isNull(Utilidades::obtenerSessionPorNombre(Pagina::SESION_ID_PAGINA_MENU_SELECCIONADA),"");

      //verifica si el html del menu esta en session, sino lo genera
      $html = Utilidades::obtenerSessionPorNombre(self::SESION_HTML_MENU);
      if(is_null($html)){
        //dibuja funciones por defecto
        $funcionesDefecto = $this->dibujarFuncionesPorDefecto($templateMenu);
        $sb->appendLine($funcionesDefecto);

        if(!is_null($arrPermisos)){
          $arrListadoCategorias = $arrPermisos[Usuario::ARRAY_PERMISO_LISTADO_CATEGORIAS];
          $totalRegistros = count($arrListadoCategorias);
          if($totalRegistros > 0){
            //recorre las categorias para ir dibujando su contenido
            for($i = 0; $i <= $totalRegistros - 1; $i++){
              $row = $arrListadoCategorias[$i];
              $idCategoria = $row["IdCategoria"];
              $nombreCategoria = $row["Categoria"];
              $listadoCategorias = $this->dibujarCategorias($arrPermisos, $idCategoria, $nombreCategoria, $i + 1, $templateMenu, $plantillaCategoria);
              $sb->appendLine($listadoCategorias);
            }
          }
        }
        //retorna valor
        $html = $sb->toString();
        Utilidades::grabarSessionPorNombre(self::SESION_HTML_MENU, $html);
      }

      //si existe una pagina en session entonces la destaca en el menu
      if (!Utilidades::isNullOrEmpty($idPaginaSeleccionadaSesion)) {
        $this->Page->ClientScript->registerEndScript("destacarPaginaMenu", "destacarPaginaMenu('".$idPaginaSeleccionadaSesion."','".$themeBaseUrl."');");
      }

      return $html;
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * dibuja las categorias con sus paginas
   * @param <type> $arrPermisos
   * @param <type> $idCategoria
   * @param <type> $nombreCategoria
   * @param <type> $indiceCicloCategoria
   * @param <type> $templateMenu
   * @param <type> $plantillaCategoria
   * @author VSR, 01/01/2011
   */
  private function dibujarCategorias($arrPermisos, $idCategoria , $nombreCategoria , $indiceCicloCategoria , $templateMenu, $plantillaCategoria){
    $html = "";
    $htmlSinRegistro = "<span class=\"cssTextoNormal\"><i>No tiene p&aacute;ginas asociadas a la categor&iacute;a</i></span>";
    $prefijoControl = "Cat".$indiceCicloCategoria;
    $themeBaseUrl = $this->Page->Theme->BaseUrl;
    $expandirContraer = "<span id=\"".$prefijoControl."_holderImagenExpandirContraer\"><a href=\"javascript:;\" onclick=\"expandirContraer('".$prefijoControl."_holderImagenExpandirContraer','".$prefijoControl."_hContenedorPagina','contraer','','','".$themeBaseUrl."');\"><span class=\"ico16-contraer cursorPointer\"><img src=\"".$this->Page->Theme->BaseUrl."/img/_blank.gif\" class=\"ico16ExpandirContraer\" alt=\"\" /></span></a>&nbsp;</span>";
    $menu = "";
    $htmlPaginas = "";
    $plantillaPaginaAux = "";
    $sb = new StringBuilder();
    $paginaActual = Utilidades::obtenerNombrePaginaActual($this);

    try {
      //obtiene listado de paginas
      $arrPaginas = $arrPermisos[Usuario::ARRAY_PERMISO_LISTADO_PAGINAS];
      if(is_null($arrPaginas)){
        $html = $htmlSinRegistro;
      } else {
        //filtra la vista por la categoria
        $arrPaginasFiltradas = Utilidades::arrayRowFilter($arrPaginas, "IdCategoria == '".$idCategoria."' && MostrarEnMenu=='1'");
        $totalRegistros = count($arrPaginasFiltradas);
        if($totalRegistros == 0){
          $html = "";
        } else {
          //crea nombres para los controles
          $idHolderTituloCategoria = $prefijoControl."_hTituloCategoria";
          $tituloCategoria = $expandirContraer.$nombreCategoria;
          $idContenedorPagina = $prefijoControl."_hContenedorPagina";
          $plantillaPagina = Utilidades::extraeTextoEntreDosPalabras($templateMenu, "<!--[BEGIN_TEMPLATE_PAGINAS]-->", "<!--[END_TEMPLATE_PAGINAS]-->");

          //recorre las paginas para ir dibujando su contenido
          for($i = 0; $i <= $totalRegistros - 1; $i++){
            //copia el valor de la variable
            $plantillaPaginaAux = $plantillaPagina;
            //obtiene valores
            $row = $arrPaginasFiltradas[$i];
            $idPagina = $row["IdPagina"];
            $tituloPagina = $row["TituloPagina"];
            $modulo = $row["Modulo"];
            $nombreClase = $row["NombreClase"];
            $moduloNombreClase = $row["ModuloNombreClase"];
            $mostrarEnMenu = $row["MostrarEnMenu"];
            $idHolderLink = $prefijoControl."_Pag".($i + 1)."_hLink";
            $target = (Utilidades::startsWith($nombreClase,"http")) ? "_blank":"_top";

            if($target == "_top") {
              $urlPagina = "javascript:;";
              $onclick = "onclick=\"abrirPaginaMenu('".$idPagina."','".$moduloNombreClase."');\"";
            } else {
              $urlPagina = $nombreClase;
              $onclick = "";
            }

            if(Utilidades::tienePermiso($moduloNombreClase, "Ver") && $mostrarEnMenu=="1") {
              //reemplaza las marcas en el template de la pagina
              $plantillaPaginaAux = str_replace("{#ID_HOLDER_LINK}", $idHolderLink, $plantillaPaginaAux);
              $plantillaPaginaAux = str_replace("{#URL_PAGINA}", $urlPagina, $plantillaPaginaAux);
              $plantillaPaginaAux = str_replace("{#ID_PAGINA}", $idPagina, $plantillaPaginaAux);
              $plantillaPaginaAux = str_replace("{#TARGET_PAGINA}", $target, $plantillaPaginaAux);
              $plantillaPaginaAux = str_replace("{#TITULO_PAGINA}", $tituloPagina, $plantillaPaginaAux);
              $plantillaPaginaAux = str_replace("{#ONCLICK}", $onclick, $plantillaPaginaAux);
              //agrega las plantillas al objeto
              $sb->appendLine($plantillaPaginaAux);
            }
          }
          //reemplaza las marcas en el template de la categoria
          $plantillaCategoria = str_replace("{#ID_HOLDER_TITULO_CATEGORIA}", $idHolderTituloCategoria, $plantillaCategoria);
          $plantillaCategoria = str_replace("{#NOMBRE_CATEGORIA}", $tituloCategoria, $plantillaCategoria);
          $plantillaCategoria = str_replace("{#ID_CONTENEDOR_PAGINAS}", $idContenedorPagina, $plantillaCategoria);
          $plantillaCategoria = str_replace("{#LISTADO_PAGINAS}", (Utilidades::isNullOrEmpty($sb->toString())) ? $htmlSinRegistro:$sb->toString(), $plantillaCategoria);
          //retorna valor
          $html = $plantillaCategoria;
        }
        return $html;
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * dibuja las funciones por defecto
   * @param <type> $templateMenu
   * @return string
   * @author VSR, 01/01/2011
   */
  private function dibujarFuncionesPorDefecto($templateMenu){
    $html = "";
    $indiceCicloCategoria = "PorDefecto";
    $nombreCategoria = "CategoriaDefecto";
    $htmlSinRegistro = "<span class=\"cssTextoNormal\"><i>No tiene p&aacute;ginas asociadas a la categor&iacute;a</i></span>";
    $prefijoControl = "Cat".$indiceCicloCategoria;
    $themeBaseUrl = $this->Page->Theme->BaseUrl;
    $expandirContraer = "<span id=\"".$prefijoControl."_holderImagenExpandirContraer\"><a href=\"javascript:;\" onclick=\"expandirContraer('".$prefijoControl."_holderImagenExpandirContraer','".$prefijoControl."_hContenedorPagina','contraer','','','".$themeBaseUrl."');\"><span class=\"ico16-contraer cursorPointer\"><img src=\"".$this->Page->Theme->BaseUrl."/img/_blank.gif\" class=\"ico16ExpandirContraer\" alt=\"\" /></span></a>&nbsp;</span>";
    $menu = "";
    $htmlPaginas = "";
    $plantillaPaginaAux = "";
    $sb = new StringBuilder();

    try {
      //crea nombres para los controles
      $idHolderTituloCategoria = $prefijoControl."_hTituloCategoria";
      $tituloCategoria = $expandirContraer.$nombreCategoria;
      $idContenedorPagina = $prefijoControl."_hContenedorPagina";
      $plantillaPagina = Utilidades::extraeTextoEntreDosPalabras($templateMenu, "<!--[BEGIN_TEMPLATE_PAGINAS]-->", "<!--[END_TEMPLATE_PAGINAS]-->");
      $paginaInicio = Utilidades::obtenerSessionPorNombre(Pagina::SESION_PAGINA_INICIO);

      //recorre las paginas para ir dibujando su contenido
      for($i = 0; $i <= 1; $i++){
        //copia el valor de la variable
        $plantillaPaginaAux = $plantillaPagina;
        //obtiene valores
        switch ($i) {
          case 0:
            $tituloPagina = "Inicio";
            $nombreArchivo = "javascript:;";
            $onclick = "onclick=\"abrirPaginaMenu('','".$paginaInicio."');\"";
            break;
          case 1:
            $tituloPagina = "Cerrar Sesi&oacute;n";
            $nombreArchivo = $this->Service->constructUrl("Logout");
            $onclick = "";
            break;
          default:
            $tituloPagina = "";
            $nombreArchivo = "";
            $onclick = "";
            break;
        }
        $idHolderLink = $prefijoControl."_Pag".($i + 1)."_hLink";
        $target = (Utilidades::startsWith($nombreArchivo,"http")) ? "_blank":"_top";

        //reemplaza las marcas en el template de la pagina
        if(!Utilidades::isNullOrEmpty($tituloPagina)){
          $plantillaPaginaAux = str_replace("{#ID_HOLDER_LINK}", $idHolderLink, $plantillaPaginaAux);
          $plantillaPaginaAux = str_replace("{#URL_PAGINA}", $nombreArchivo, $plantillaPaginaAux);
          $plantillaPaginaAux = str_replace("{#ID_PAGINA}", "", $plantillaPaginaAux);
          $plantillaPaginaAux = str_replace("{#TARGET_PAGINA}", $target, $plantillaPaginaAux);
          $plantillaPaginaAux = str_replace("{#TITULO_PAGINA}", $tituloPagina, $plantillaPaginaAux);
          $plantillaPaginaAux = str_replace("{#ONCLICK}", $onclick, $plantillaPaginaAux);
          //agrega las plantillas al objeto
          $sb->appendLine($plantillaPaginaAux);
        }
      }
      //retorna valor
      $html = $sb->toString();
      $html = (Utilidades::isNullOrEmpty($html)) ? $htmlSinRegistro : $html."<br />";
      return $html;
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * obtiene el listado de notificaciones a mostrar al usuario
   * @param <type> $oUsuario
   * @author VSR, 10/04/2011
   */
  private function dibujarNotificaciones($oUsuario) {
    $totalRegistros = 0;
    $sb = new StringBuilder();
    $paginaActual = Utilidades::obtenerNombrePaginaActual($this);

    try {
      $idUsuario = $oUsuario->getId();
      $esSuper = $oUsuario->getEsSuper();
      $arr = Notificacion::obtenerListadoMostrar($idUsuario, $esSuper, $paginaActual);
      if(is_null($arr)) {
        $totalRegistros = 0;
      } else {
        $totalRegistros = count($arr);
      }

      if($totalRegistros > 0 ) {
        $sb->appendLine("jQuery(document).ready(function(){");
        for($i=0; $i <= $totalRegistros - 1; $i++) {
          $row = $arr[$i];
          $idUsuario = Utilidades::isNull($row["IdUsuario"],"-1");
          $idNotificacion = Utilidades::isNull($row["IdNotificacion"],"-1");
          $titulo = Utilidades::isNull($row["Titulo"],"<i>Escriba un t&iacute;tulo</i>");
          $controlHtml = Utilidades::isNull($row["ControlHtmlAsociado"],"notificacion_tooltips");
          $skin = Utilidades::isNull($row["Skin"],"blue");
          $posicion = Utilidades::isNull($row["Posicion"],"tl");
          $ajusteTop = Utilidades::isNull($row["AjusteTop"],"");
          $ajusteLeft = Utilidades::isNull($row["AjusteLeft"],"");
          $ancho = Utilidades::isNull($row["Width"],"250");
          $descripcion = Utilidades::isNull($row["Descripcion"],"<i>Escriba un descripci&oacute;n</i>");
          $bodyNotificacion = "<span class=\"cssNotificacionTitulo\">{#TITULO}<br/></span><span class=\"cssNotificacionTextoNormal\">{#DESCRIPCION}</span><br/>{#BOTONES}";
          $opciones = "";

          //construye cuerpo de la notificacion
          $htmlBotones = $this->dibujarBotonesNotificacion($idUsuario, $idNotificacion, $controlHtml, $skin);
          $bodyNotificacion = str_replace("{#TITULO}", $titulo, $bodyNotificacion);
          $bodyNotificacion = str_replace("{#DESCRIPCION}", $descripcion, $bodyNotificacion);
          $bodyNotificacion = str_replace("{#BOTONES}", $htmlBotones, $bodyNotificacion);

          //construye las opciones
          $opciones .= "showme:true";
          $opciones .= ", style:'cssTextoNormal'";
          $opciones .= ", sticky:1";
          $opciones .= ", mode:'$posicion'";
          $opciones .= ", width: $ancho";
          $opciones .= ", skin:'$skin'";
          if(!Utilidades::isNullOrEmpty($ajusteTop)) $opciones .= ", ajusteTop:$ajusteTop";
          if(!Utilidades::isNullOrEmpty($ajusteLeft)) $opciones .= ", ajusteLeft:$ajusteLeft";

          //escribe script para mostrar el tooltips en la pagina
          $sb->appendLine("  jQuery('#$controlHtml').tooltip('$bodyNotificacion', { $opciones });");
        }
        $sb->appendLine("});");
      }
      $this->Page->ClientScript->registerEndScript("notificacionesOnLoad", $sb->toString());
    } catch (Exception $e) {
      //no hace nada
    }
  }

  /**
   * dibuja los botones "marcar como leido" y "recordar mas tarde" de la notificacion
   * @param <type> $idUsuario
   * @param <type> $idNotificacion
   * @param <type> $controlHtml
   * @return string
   * @author VSR, 11/04/2011
   */
  private function dibujarBotonesNotificacion($idUsuario, $idNotificacion, $controlHtml, $skin) {
    $html = "";
    $sb = new StringBuilder();

    try {
      $sb->append("<div style=\"text-align:right; padding-top:10px;\">");
      $sb->append("  <ul class=\"floatRightLI cssTextoNormal\">");
      $sb->append("    <li style=\"padding-left:5px\"><input type=\"button\" value=\"Le&iacute;do\" class=\"$skin-boton-leido\" onclick=\"grabarEstadoNotificacion(&quot;$idUsuario&quot;,&quot;$idNotificacion&quot;,&quot;$controlHtml&quot;,&quot;Leido&quot;)\" /></li>");
      $sb->append("    <li style=\"padding-left:5px\"><input type=\"button\" value=\"Recordar desp&uacute;es\" class=\"$skin-boton-recordar\" onclick=\"grabarEstadoNotificacion(&quot;$idUsuario&quot;,&quot;$idNotificacion&quot;,&quot;$controlHtml&quot;,&quot;Recordar&quot;)\" /></li>");
      $sb->append("  </ul>");
      $sb->append("</div>");
      $html = $sb->toString();
    } catch (Exception $e) {
      $html = "";
    }
    return $html;
  }

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Eventos Controles">
  public function  onInit($param) {
    parent::onInit($param);
    try {
      $session = new THttpSession;
      $session->open();
    } catch (Exception $e) {
      //se deja estructura
    }
    $this->txtThemeBaseUrl->Value = $this->Page->Theme->BaseUrl;
  }

  public function  onLoad($param) {
    parent::onLoad($param);
    try {
      //codigo;
    } catch (Exception $e) {
      //codigo;
    }
  }

//</editor-fold>

}

?>
